﻿

Public Class clsDescuento

    Private Codigo As Integer
    Private Nombre As String
    Private Porcentaje As Double
    Private Legajo As Integer

    Public Property pCodigo() As Integer
        Get
            Return Codigo
        End Get
        Set(ByVal value As Integer)
            Codigo = value
        End Set
    End Property

    Public Property pLegajo() As Integer
        Get
            Return Legajo
        End Get
        Set(ByVal value As Integer)
            Legajo = value
        End Set
    End Property

    Public Property pNombre() As String
        Get
            Return Nombre
        End Get
        Set(ByVal value As String)
            Nombre = value
        End Set
    End Property

    Public Property pPorcentaje() As Double
        Get
            Return Porcentaje
        End Get
        Set(ByVal value As Double)
            Porcentaje = value
        End Set
    End Property

    'la siguiete propiedad es para los mensajes de error
    Private MsgDescuento As String
    Public Property pMsgDescuento() As String
        Get
            Return MsgDescuento
        End Get
        Set(ByVal value As String)
            MsgDescuento = value
        End Set
    End Property


    Private dbConexion As clsConexion

    Public Sub New()
        dbConexion = New clsConexion
    End Sub

    Public Enum TipoQuery
        InfoTodo = 0
        InfoIndividual = 1
    End Enum

    Public Enum VerifExistType
        Codigo = 0
        Legajo = 1
        Ambos = 2
    End Enum

    Public dbDescDataRow As DataRow
    Public dbDescDataSet As DataSet

    Public Function fn_EjecutarQuery(ByVal Tipo As TipoQuery) As Boolean
        Try
            Dim EjecutarQuery As Boolean = False
            Dim SqlQuery As String
            If dbConexion.fn_abrir Then
                Select Case Tipo
                    Case TipoQuery.InfoIndividual
                        SqlQuery = "SELECT * FROM Descuentos " & _
                                   "WHERE  Codigo = @Codigo AND Legajo = @Legajo"

                        dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)
                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Codigo", Data.SqlDbType.Int))
                        dbConexion.dbcommand.Parameters("@Codigo").Value = pCodigo

                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Nombre", Data.SqlDbType.VarChar))
                        dbConexion.dbcommand.Parameters("@Nombre").Value = pNombre

                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Porcentaje", Data.SqlDbType.Float))
                        dbConexion.dbcommand.Parameters("@Porcentaje").Value = pPorcentaje

                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Legajo", Data.SqlDbType.Int))
                        dbConexion.dbcommand.Parameters("@Legajo").Value = pLegajo

                        dbConexion.dbdataadapter = New SqlClient.SqlDataAdapter(dbConexion.dbcommand)
                        dbConexion.dbdataset = New DataSet
                        dbConexion.dbdataadapter.Fill(dbConexion.dbdataset, "Descuentos")
                        If dbConexion.dbdataset.Tables.Count > 0 Then
                            EjecutarQuery = True
                            dbDescDataRow = dbConexion.dbdataset.Tables("Descuentos").Rows(0)
                            dbConexion.dbdataadapter.Dispose()
                            dbConexion.dbdataset.Dispose()
                            dbConexion.dbcommand.Dispose()
                            dbConexion.su_cerrar()
                        Else
                            MsgDescuento = "Error al obtener la información."
                        End If
                    Case TipoQuery.InfoTodo
                        SqlQuery = "SELECT * FROM Descuentos WHERE Legajo = @Legajo"

                        dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)
                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Legajo", Data.SqlDbType.Int))
                        dbConexion.dbcommand.Parameters("@Legajo").Value = pLegajo

                        dbConexion.dbdataadapter = New SqlClient.SqlDataAdapter(dbConexion.dbcommand)
                        dbConexion.dbdataadapter.Fill(dbConexion.dbdataset, "Descuentos")
                        If dbConexion.dbdataset.Tables.Count > 0 Then
                            EjecutarQuery = True
                            dbDescDataSet = dbConexion.dbdataset.Copy()
                            dbConexion.dbdataadapter.Dispose()
                            dbConexion.dbdataset.Dispose()
                            dbConexion.dbcommand.Dispose()
                            dbConexion.su_cerrar()
                        Else
                            MsgDescuento = "Error al obtener la información."
                        End If
                End Select
            Else
                MsgDescuento = "No se pudo establecer la conexión con la base de datos."
            End If
            Return (EjecutarQuery)
        Catch ex As Exception
            MsgDescuento = "Ocurrio un problema al ejecutar la consulta." & vbCrLf & ex.Message
            Return (False)
        End Try
    End Function

    Public Function fn_ValidarDatos(ByVal Operacion As String) As Boolean
        Select Case Operacion
            Case "Add", "Upd", "Del"
                If Trim(Codigo) = 0 Then
                    MsgDescuento = "Debe proporcionar el Codigo"
                    Return (False)
                End If

                If Trim(Nombre) = "" Then
                    MsgDescuento = "Debe proporcionar el Nombre del descuento"
                    Return (False)
                End If

                If Trim(Porcentaje) = 0 Then
                    MsgDescuento = "Debe proporcionar el Porcentaje"
                    Return (False)
                End If
        End Select
        Return (True)
    End Function

    Public Function fn_AddDescuento() As Boolean
        Try
            Dim EjecucionOk As Boolean = False
            Dim SqlQuery As String

            If fn_ValidarDatos("Add") Then
                If dbConexion.fn_abrir Then
                    SqlQuery = " insert into Descuentos(Codigo,Nombre,Porcentaje,Legajo) " & _
                               " values(@Codigo,@Nombre,@Porcentaje,@Legajo) "
                    dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)
                    With dbConexion.dbcommand
                        .CommandType = CommandType.Text
                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Codigo", Data.SqlDbType.Int))
                        .Parameters("@Codigo").Value = pCodigo()

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Nombre", Data.SqlDbType.VarChar))
                        .Parameters("@Nombre").Value = pNombre

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Porcentaje", Data.SqlDbType.Float))
                        .Parameters("@Porcentaje").Value = CDbl(pPorcentaje)

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Legajo", Data.SqlDbType.Int))
                        .Parameters("@Legajo").Value = pLegajo

                        If .ExecuteNonQuery() > 0 Then
                            EjecucionOk = True
                            dbConexion.dbcommand.Dispose()
                            dbConexion.su_cerrar()
                        Else
                            MsgDescuento = "Se obtuvo errores al agregar el Descuento."
                            EjecucionOk = False
                        End If
                    End With
                Else
                    EjecucionOk = False
                End If
            Else
                EjecucionOk = False
            End If
            Return (EjecucionOk)
        Catch ex As Exception
            MsgDescuento = "Error al agregar el Descuento." & vbCrLf & ex.Message
            If dbConexion.dbconnection.State = ConnectionState.Open Then dbConexion.su_cerrar()
            Return (False)
        End Try
    End Function
    Public Function fn_DelDescuento() As Boolean
        Try
            Dim EjecucionOk As Boolean = False
            Dim SqlQuery As String
            If fn_ValidarDatos("Del") Then
                If dbConexion.fn_abrir Then
                    SqlQuery = " delete from  Descuentos " & _
                               " where   Codigo=@Codigo AND Legajo=@Legajo"
                    dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)
                    With dbConexion.dbcommand
                        .CommandType = CommandType.Text

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Codigo", Data.SqlDbType.Int))
                        .Parameters("@Codigo").Value = pCodigo

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Legajo", Data.SqlDbType.Int))
                        .Parameters("@Legajo").Value = pLegajo

                        If .ExecuteNonQuery() > 0 Then
                            EjecucionOk = True
                            dbConexion.dbcommand.Dispose()
                            dbConexion.su_cerrar()
                        Else
                            MsgDescuento = "Se obtuvo errores al eliminar el descuento"
                            EjecucionOk = False
                        End If
                    End With
                Else
                    EjecucionOk = False
                End If
            Else
                EjecucionOk = False
            End If
            Return (EjecucionOk)
        Catch ex As Exception
            MsgDescuento = "Error al agregar el Descuento." & vbCrLf & ex.Message
            If dbConexion.dbconnection.State = ConnectionState.Open Then dbConexion.su_cerrar()
            Return (False)
        End Try
    End Function

    Public Function fn_UpdDescuento() As Boolean
        Try
            Dim EjecucionOk As Boolean = False
            Dim SqlQuery As String
            If fn_ValidarDatos("Upd") Then
                If dbConexion.fn_abrir Then
                    SqlQuery = " update Descuentos" & _
                               " set Nombre = @Nombre, Porcentaje= @Porcentaje" & _
                                " where Codigo= @Codigo AND Legajo= @Legajo "
                    dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)
                    With dbConexion.dbcommand
                        .CommandType = CommandType.Text
                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Codigo", Data.SqlDbType.Int))
                        .Parameters("@Codigo").Value = pCodigo()

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Nombre", Data.SqlDbType.VarChar))
                        .Parameters("@Nombre").Value = pNombre

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Porcentaje", Data.SqlDbType.Float))
                        .Parameters("@Porcentaje").Value = pPorcentaje

                        .Parameters.Add(New Data.SqlClient.SqlParameter("@Legajo", Data.SqlDbType.Int))
                        .Parameters("@Legajo").Value = pLegajo

                        If .ExecuteNonQuery() > 0 Then
                            EjecucionOk = True
                            dbConexion.dbcommand.Dispose()
                            dbConexion.su_cerrar()
                        Else
                            MsgDescuento = "Se obtuvo errores al modificar el Descuento."
                            EjecucionOk = False
                        End If
                    End With
                Else
                    EjecucionOk = False
                End If
            Else
                EjecucionOk = False
            End If
            Return (EjecucionOk)
        Catch ex As Exception
            MsgDescuento = "Error al agregar el Descuento." & vbCrLf & ex.Message
            If dbConexion.dbconnection.State = ConnectionState.Open Then dbConexion.su_cerrar()
            Return (False)
        End Try
    End Function

    Public Function fn_ExisteDescuento(ByVal TipoVerificacion As VerifExistType) As Boolean
        Try
            Dim Existe As Boolean = False
            Dim SqlQuery As String
            If dbConexion.fn_abrir Then

                Select Case TipoVerificacion
                    Case VerifExistType.Ambos
                        SqlQuery = " select * from Descuentos " & _
                                   " where   Codigo= @Codigo and Legajo= @Legajo"

                        dbConexion.dbcommand = New Data.SqlClient.SqlCommand(SqlQuery, dbConexion.dbconnection)

                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Codigo", Data.SqlDbType.Int))
                        dbConexion.dbcommand.Parameters("@Codigo").Value = pCodigo

                        dbConexion.dbcommand.Parameters.Add(New Data.SqlClient.SqlParameter("@Legajo", Data.SqlDbType.Int))
                        dbConexion.dbcommand.Parameters("@Legajo").Value = pLegajo

                        dbConexion.dbcommand.CommandType = CommandType.Text
                        MsgDescuento = "El Descuento no Existe."
                End Select

                dbConexion.dbdataadapter = New SqlClient.SqlDataAdapter(dbConexion.dbcommand)
                dbConexion.dbdataset = New DataSet
                dbConexion.dbdataadapter.Fill(dbConexion.dbdataset, "Descuentos")

                If dbConexion.dbdataset.Tables.Count > 0 Then
                    If dbConexion.dbdataset.Tables("Descuentos").Rows.Count > 0 Then
                        Existe = True
                        MsgDescuento = "El descuento Existe."
                    End If
                    dbDescDataSet = dbConexion.dbdataset.Copy()
                    dbConexion.dbdataadapter.Dispose()
                    dbConexion.dbdataset.Dispose()
                    dbConexion.dbcommand.Dispose()
                    dbConexion.su_cerrar()
                Else
                    MsgDescuento = "El descuento no Existe."
                    Existe = False
                End If
            End If
            Return (Existe)
        Catch ex As Exception
            MsgDescuento = "Error al buscar si existe el descuento." & vbCrLf & ex.Message
            Return (False)
        End Try

    End Function

End Class
